package com.doitedu.core

import com.doitedu.utils.SparkUtil

/**
 * @Date: 22.7.2 
 * @Author: HANGGE
 * @qq: 598196583
 * @Tips: 学大数据 ,到多易教育
 * @Description:
 */
object C21_Action_Operators {
  /**
   * 隐式类型  指定Int类型的排序规则 降序排列
   */
 implicit val  op = new Ordering[Int] {
   override def compare(x: Int, y: Int): Int ={
     y.compare(x)
   }
 }

  def main(args: Array[String]): Unit = {
    val sc = SparkUtil.getSparkContext("action...")
    val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7))

    /**
     * reduce
     * 第一个元素 当次计算计算结果
     * x2: 第二个元素开始
     */
    val res: Int = rdd.reduce((x1, x2) => x1 + x2)

    /**
     * collect
     *   将数据收集到本地集合中
     */
    val res2: Array[Int] = rdd.collect()

    /**
     * collectAsMap
     *   处理的是KV 的RDD转换成Map集合
     */
    val stringToInt = rdd.map(e=>(s"hello${e}", e)).collectAsMap()

    rdd.map(e=>(s"hello${e}", e))

    /**
     * count
     *   统计整个RDD 处理数据的条数  Long类型
     */
    val cnt: Long = rdd.count()
    println(cnt)

    /**
     * first()   返回RDD中的第一条数据
     * 0号区的第一个元素数据
     */
    rdd.first()

    /**
     * take  获取N个元素  返回一个本地集合
     */
    val arr = rdd.take(3)

    /**
     * takeOrdered
     *    按照默认排序骨规则排序  返回前n个元素
     */
    val arr2 = rdd.takeOrdered(3)
    val arr3 = rdd.takeOrdered(3)
    println(arr3.toList)

    /**
     * saveAsTextFile  将数据保存在文件中
     *   本地    d://   相对路径  聚堆路径
     *   HDFS   hdfs://
     *   底层起始就是  FileOutputFormat
     *
     */
   rdd.saveAsTextFile("")

    sc.stop()




  }

}
